/*
 * @lc app=leetcode.cn id=66 lang=cpp
 *
 * [66] 加一
 */

#include <limits.h>

#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;

// @lc code=start
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int n = digits.size();          // 记录原整数的位数
        int flag = 1;                   // 记录是否需要进位
        int index = n - 1;              // 记录需要进位的下标

        // 从低位向上遍历
        while (flag == 1 && index >= 0) {
            if (digits[index] == 9) {
                // 如果该位为 9，需要继续进位
                digits[index] = 0;
                index--;
            } else {
                // 如果该位非 9，直接加在该位
                digits[index]++;
                flag = 0;
                break;
            }
        }

        // 判断是否还有进位，则需要添加一位
        if (flag == 1) {
            digits.push_back(digits[n - 1]);
            for (int i = n - 1; i >= 1; i--) {
                digits[i] = digits[i - 1];
            }
            digits[0] = 1;
        }
        
        return digits;
    }
};
// @lc code=end

